/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package uloha3;

import java.util.Arrays;
import java.util.Iterator;


public class Konfiguracia implements Comparable{

        Batoh ruksak;
        int [] ohodnotenieKonfiguracnychPremennych ;

        int cenaKonfiguracie;
        int hmotnostKonfiguracie;
        int pocetPevnychKonfiguracnychPremennych;



    public Konfiguracia(Batoh ruksak) {
        ohodnotenieKonfiguracnychPremennych = new int [ruksak.pocetVeciVbatohu];
        Arrays.fill(ohodnotenieKonfiguracnychPremennych, 0);
        this.ruksak = ruksak;
    }
    
    Konfiguracia (Konfiguracia dalsia)
    {
        this(dalsia.ruksak);
    }
    
    public int getOhodnotenie(int n)
    {
        if (n <ruksak.pocetVeciVbatohu)
        {
         return ohodnotenieKonfiguracnychPremennych[n];
        }
        else {
            throw new IndexOutOfBoundsException("index " + n +" do pola s velkostou "+ ruksak.pocetVeciVbatohu);
        }
    }
    
    public void SetOhodnotenie( int n , int hodnota)
    {
       if (n <ruksak.pocetVeciVbatohu)
        {
         ohodnotenieKonfiguracnychPremennych[n] = hodnota;
        }
        else {
            throw new IndexOutOfBoundsException("index " + n +" do pola s velkostou "+ ruksak.pocetVeciVbatohu);
        }  
    }
    
    public void zistiCenuAhmotnostKonfiguracie()
       {
            cenaKonfiguracie = 0;
            hmotnostKonfiguracie = 0 ;
            int pocitadlo = 1;
            
            Iterator iter = ruksak.zoznamVeci.iterator();
            while (iter.hasNext())
              {
                VecDoBatohu temp = (VecDoBatohu) iter.next();
                cenaKonfiguracie += (ohodnotenieKonfiguracnychPremennych[pocitadlo-1])*(ruksak.zoznamVeci.get(pocitadlo)).cenaVeci;
                hmotnostKonfiguracie += (ohodnotenieKonfiguracnychPremennych[pocitadlo-1])*(ruksak.zoznamVeci.get(pocitadlo)).hmotnostVeci;
              }
       }
       
       
    public int getCenaKonfiguracie() {
        return cenaKonfiguracie;
    }


    public int getHmotnostKonfiguracie() {
        return hmotnostKonfiguracie;
    }
    
    public boolean jeKonfiguraciaVyhovujuca()
    {
        zistiCenuAhmotnostKonfiguracie();
        if (hmotnostKonfiguracie <= ruksak.maxHmotnost)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int compareTo(Object o) {
        
        Konfiguracia temp = (Konfiguracia) o;
        temp.zistiCenuAhmotnostKonfiguracie();
        this.zistiCenuAhmotnostKonfiguracie();
        if (temp.cenaKonfiguracie < this.cenaKonfiguracie)
        {
            return 1;
        }
        if (temp.cenaKonfiguracie == this.cenaKonfiguracie)
        {
            return 0;
        }
        else
        {
            return -1;
        }
    }
    
        public int getPocetPevnychKonfiguracnychPremennych() {
        return pocetPevnychKonfiguracnychPremennych;
    }

    public void setPocetPevnychKonfiguracnychPremennych(int pocetPevnychKonfiguracnychPremennych) {
        this.pocetPevnychKonfiguracnychPremennych = pocetPevnychKonfiguracnychPremennych;
    }
    
    
}
 